#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main()
{
    int fd1 = open("file.txt", O_WRONLY|O_CREAT, 0644);

    dup2(fd1, 1); // 让标准输出指向打开的文件

    close(fd1);
    printf("append content\n");

    return 0;
}

//int main() 
//{
//    // 打开文件（创建并只写，若已存在则截断）
//    int fd = open("output.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644);
//    
//    if (fd == -1) 
//    {
//        perror("open failed");
//        return 1;
//    }
//
//    // 将标准输出（1）重定向到 fd 指向的文件
//    if (dup2(fd, 1) == -1) 
//    {
//        perror("dup2 failed");
//        return 1;
//    }
//    
//    close(fd);  // 此时 1 已指向文件，fd 可关闭
//
//    // 后续 printf 会写入文件而非终端
//    printf("This will be written to output.txt\n");
//    return 0;
//}

//int main()
//{
//    close(1); // 关闭标注输出
//    int fd = open("myfile", O_CREAT | O_WRONLY | O_TRUNC, 0644);
//    if(fd < 0)
//    {
//        perror("open failed");
//        return 1;
//    }
//    
//    printf("fd: %d\n", fd);
//    fflush(stdout);
//    
//    close(fd);    
//    return 0;
//}    

//int main()
//{
//    close(1); // 关闭标注输出
//    int fd1 = open("myfile", O_CREAT | O_WRONLY | O_TRUNC, 0666);
//    
//    printf("hello Linux\n");
//    
//    close(1);    
//    return 0;
//}  

//int main()
//{
//    close(0);
//    //close(2);
//	int fd = open("myfile", O_CREAT | O_WRONLY | O_TRUNC, 0666);
//	if(fd < 0)
//    {
//		perror("open");
//		return 1;
//	}
//    
//	printf("fd: %d\n", fd);
//	close(fd);
//	return 0;
//}

//int main()
//{
//	int fd = open("myfile", O_CREAT | O_WRONLY | O_TRUNC, 0666);
//
//    if(fd < 0)
//    {
//		perror("open");
//		return 1;
//	}
//    
//	printf("fd: %d\n", fd);
//	close(fd);
//	return 0;
//}

//int main()
//{
//    close(1);
//    int fd1 = open("log.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666);
//    
//
//    printf("Hello Linux");
//    
//    close(fd1);
//    
//    return 0;
//}


//int main()
//{
//   	int fd1 = open("log1.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666);
//  	int fd2 = open("log2.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666);
//   	int fd3 = open("log3.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666);
//   	int fd4 = open("log4.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666);
//    
//    if(fd1 < 0)exit(1);
//    if(fd2 < 0)exit(1);
//    if(fd3 < 0)exit(1);
//    if(fd4 < 0)exit(1);
//
//    printf("fd1: %d\n", fd1);
//    printf("fd2: %d\n", fd2);
//    printf("fd3: %d\n", fd3);
//    printf("fd4: %d\n", fd4);
//
//    close(fd1);
//    close(fd2);
//    close(fd3);
//    close(fd4);
//    
//    return 0;
//}

//#define ONE (1 << 0) //1
//#define TWO (1 << 1) //2
//#define THREE (1 << 2) //4
//#define FOUR (1 << 3) // 8
//
//void func(int flags)
//{
//    if(flags & ONE) printf("function1\n");
//    if(flags & TWO) printf("function2\n");
//    if(flags & THREE) printf("function3\n");
//    if(flags & FOUR) printf("function4\n");
//    printf("\n");
//}
//
//int main()
//{
//    func(ONE);
//    func(ONE | TWO);
//    func(ONE | TWO | THREE);
//    func(ONE | THREE);
//    func(THREE | FOUR);    
//    
//    return 0;
//}


//#define ONE 0001
//#define TWO 0002
//#define THREE 0004
//
//void func(int flags)
//{
//    if(flags & ONE) printf("flags has ONE");
//    if(flags & TWO) printf("flags has TWO");
//    if(flags & THREE) printf("flags has THREE");
//    printf("\n");
//}
//
//int main()
//{
//    func(ONE);
//    func(ONE|TWO);
//    func(ONE | TWO | THREE);
//    
//    return 0;
//}


//int main()
//{
//    fputs("hello stdin\n", stdout);
//    fputs("hello stdout\n", stdout);
//    fputs("hello stderr\n", stdout);
//    
//    return 0;
//}

//int main()
//{
//    FILE* fp = fopen("log.txt", "r");
//    if(fp == NULL)
//    {
//        perror("fopen failed\n");
//        return 1;
//    }
//    char buffer[64];
//    for(int i = 0; i < 5; i++)
//    {
//        fgets(buffer, sizeof(buffer), fp);
//        printf("%s", buffer);
//    }
//    fclose(fp);
//    
//    return 0;
//}

//int main()
//{
//    FILE* fp = fopen("log.txt", "w");
//    if(fp == NULL)
//    {
//        perror("fopen filed\n");
//        return 1;
//    }
//    
//    int count = 5;
//    while(count--)
//    {
//        fputs("hello world\n", fp);
//    }
//    
//    fclose(fp);
//    sleep(30);
//    return 0;
//}

